Add FY2026 HUD Fair Market Rents and rebuild HUD annual income on 24 CFR 5.609#8804
Conversation
- Add FY2026 county-level Fair Market Rents so simulations at period 2026 resolve to FY2026 values (period-exact); FY2025 rows are unchanged. - Count unemployment compensation, child support received, and veterans' benefits in hud_annual_income per 24 CFR 5.609. - Document the Connecticut planning-region FY2026 FMR gap (tracked in PolicyEngine#8803). Addresses PolicyEngine#8801 (county FMR step). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #8804 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 3 7 +4
Lines 34 107 +73
Branches 0 2 +2
=========================================
+ Hits 34 107 +73
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
- Move counted income sources into gov/hud/annual_income/sources (earned, unearned) parameters instead of the market_income aggregate. - Add 24 CFR 5.609(b)(3) child and (b)(14) full-time-student-dependent earned-income exclusions, using the section 5.611 dependent deduction as the student earnings threshold. - Exclude debt relief (no HUD basis; (b)(20) excludes loan proceeds) and the Alaska Permanent Fund dividend; retirement account distributions stay out. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…into hud-fmr-fy2026
…year Connecticut's legacy county FIPS (09001-09015) returned zero at period 2026 because HUD's FY2026 file uses the new planning-region FIPS (09110-09190) that PolicyEngine's County enum does not yet carry. hud_fair_market_rent now fills any (county, bedroom) row absent from the preferred fiscal year with the most recent earlier bundled year, so Connecticut uses FY2025 rents at period 2026 instead of zero. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…into hud-fmr-fy2026
- Add person-level hud_earned_income and hud_unearned_income (adds) sourced from the gov/hud/annual_income/sources parameter lists. - Add is_hud_dependent (24 CFR 5.603) and key the full-time-student earned-income exclusion on it, so a student dependent is recognized regardless of tax-unit structure. - Exclude foster children's and adults' own income (24 CFR 5.603); TANF is a unit-level family benefit and is counted whole. - Fold the Connecticut FMR-fallback changelog into the FY2026 entry. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Add hud_countable_earned_income and hud_countable_unearned_income (SPMUnit): earned income after the child and full-time-student earned- income exclusions and the foster-member mask, and unearned income after the foster-member mask plus whole unit-level TANF. - hud_annual_income is now the sum of the two countable variables. - Move the HUD income-computation variables under variables/gov/hud/income/. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…into hud-fmr-fy2026
Adds test coverage for is_hud_dependent (direct truth-table cases) and the $480 dependent deduction boundary, foster+TANF interaction, foster child unearned income, and full-time-student spouse cases; documents why retirement_distributions is excluded from unearned income sources (24 CFR 5.609(b)(26) periodic-payment carve-out with no periodic/lump-sum data to split on); consolidates changelog fragments; updates the FMR README with the FY2026 Federal Register notice, a softened LIHTC note, and a Connecticut planning-region TODO. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…into hud-fmr-fy2026
PavelMakarchuk
left a comment
There was a problem hiding this comment.
Review: FY2026 FMR + hud_annual_income rebuild on 24 CFR 5.609
Approving. No CRITICAL code/regulatory/test blockers. The rebuild faithfully implements HOTMA 5.609, the FMR data is the correct revised FY2026 values, CI is fully green, and the headline risks (CT fallback, $480 student cap, each exclusion) are all genuinely tested. One doc-citation fix is worth doing before merge; the rest are follow-ups.
What's solid
- 5.609 income logic correct: (a)(1) member-scope (18+/head-spouse full income; under-18 dependents unearned-only), (b)(3) child earned-income exclusion (
age < 18), (b)(14)min(earned, $480)dependent full-time-student cap ($480 confirmed current per 5.611), (b)(4) foster masking. - No reinvention:
hud_earned/unearned_incomeread parameterized lists of atomic variables;market_incomeintentionally dropped (it carries capital gains 5.609 excludes). Entity = Person throughout, aggregated at SPMUnit; TANF counted once (and CI confirms no compute cycle despite state TANF vars consuminghud_annual_income). - FMR resolution sound:
nearest_fmr_year(2026→FY2026, 2027→FY2026, 2024→FY2025); earlier-year fallback back-fills missing rows beforefillna(0). Loop is over years (1–2 iters), vectorized per subset — no row explosion. FY2025 rows byte-identical (23,820 added lines, allyear=2026, zero deletions). - CT stopgap tested & works: legacy county
09001at 2026 → FY2025 rent (not 0), since FY2026 CT carries only planning-region codes (09110–09190).
Worth fixing before merge
- [reference] FMR README cites the superseded original FY2026 notice (Fed. Reg. 2025-16060) and the non-revised
FY26_FMRs.xlsx, while the CSV ships the revised values (Fed. Reg. 2026-07741, Apr 21 2026; e.g. CA 06037 = 2079/2903, verified against the revised workbook). Data is right — only the citation/refresh command is wrong, so following the docs wouldn't reproduce the file. Update the source + refresh filename. workers_compensationmissing fromunearned.yaml— it's an explicit 5.609(a)(1) inclusion and exists in the model.
Follow-ups (not merge blockers)
- Excluding all
retirement_distributionsdrops periodic DC-account withdrawals (5.609 counts periodic; only lump-sum excluded per (b)(26)). Defensible — no periodic/lump split exists, and pensions/annuities are still caught viapension_income. Worth a tracking issue. - $480 student cap reuses the dependent-deduction parameter — two legally distinct provisions (5.611 vs the deduction) coincidentally sharing $480; give the cap its own parameter so they can't silently move together.
EXTRA_BEDROOM_FMR_INCREMENT = 0.15hardcoded → parameterize (pre-existing).- Countable-income vars cite bare 5.609 → add
(b)(3)/(b)(14)anchors; drop the discourageddocumentationfield onhud_annual_income. - HOTMA (a)(2) $50k asset imputation not modeled — document as a known scope limitation so the "5.609 rebuild" isn't mistaken for complete coverage.
- Test gap: child age 17-vs-18 boundary for the (b)(3) exclusion is untested (only ages 16/10 used).
🤖 Reviewed with Claude Code
Summary
Two HUD updates:
hud_annual_incomeon 24 CFR 5.609 — parameterized, Person-level income components plus the regulation's earned-income and foster exclusions.1. FY2026 county Fair Market Rents
fair_market_rents.csvfrom HUD's published FY2026 revised county workbook viatools/convert_hud_fmr_xlsx.py(+23,820 FY2026 rows; FY2025 rows byte-for-byte unchanged).nearest_fmr_yearresolves period-exactly:2025 → FY2025,2026 → FY2026, with nearest-bundled-year fallback outside the range.hud_fair_market_rentfalls back to the most recent earlier bundled year rather than returning zero.Connecticut
HUD's FY2026 file adopts Connecticut's nine Census planning regions (FIPS
09110–09190) in place of the eight legacy counties (09001–09015), which PolicyEngine'sCountyenum still uses. Rather than return 0 for a legacy CT county at period 2026, the fallback makes Connecticut use its FY2025 rents. This is a stopgap; migrating the county model to the planning regions is tracked in #8803.2. HUD annual income — 24 CFR 5.609 rebuild
gov/hud/annual_income/sources/{earned,unearned}.yamland summed by new Person-level variableshud_earned_incomeandhud_unearned_income(viaadds). TANF — the one unit-level family benefit — is counted whole at the SPMUnit level.is_hud_dependentvariable (§5.603: a family member other than head/spouse who is under 18, has a disability, or is a full-time student), so a student dependent is recognized regardless of tax-unit structure.New variables:
hud_earned_income,hud_unearned_income,is_hud_dependent.Testing
hud_annual_income(14) +hud_fair_market_rent(17) unit tests pass.gov/hudtree + partner contract tests + AZ/FL/NY/VT state programs that depend onhud_annual_income: pass (399–433 across runs).Regulatory authority
Related
🤖 Generated with Claude Code